﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	DataGridCompositionChimiqueVM.cs
  -- Objet			  :	Vue Model de la grille des compositions chimiques
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using ModelEntities;
using ModelEntities.Adapter;
using ModelEntities.CompositionChimique;
using GeneralServices.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;

namespace ReprisePV.UserControls
{
    /// <summary>
    /// ViewModel du composant DataGridCompositionChimique
    /// </summary>
    public class DataGridCompositionChimiqueVM : ViewModelBase
    {
        #region Atttributs

        /// <summary>
        /// PV Actuel du détails de la vue
        /// </summary>
        private MEntetePV pvActuel;

        /// <summary>
        /// Nombre de page des compositions chimiques
        /// </summary>
        private Int32 nbPages;

        /// <summary>
        /// Numéro de la page actuelle
        /// </summary>
        private Int32 pageActuel;

        #endregion

        #region Propriétés

        #region Command

        public ICommand Plus
        {
            get;
            private set;
        }

        public ICommand Moins
        {
            get;
            private set;
        }

        #endregion

        /// <summary>
        /// Composition Chimiques de la grille
        /// </summary>
        public CompositionChimiques Compos
        {
            get;
            private set;
        }

        /// <summary>
        /// Nombre de page des compositions chimiques
        /// </summary>
        public Int32 NbPages
        {
            get { return nbPages; }
            private set
            {
                nbPages = value;
                OnPropertyChanged("NbPages");

                if (nbPages > 0)
                    PageActuel = 1;
            }
        }

        /// <summary>
        /// Numéro de la page actuelle
        /// </summary>
        public Int32 PageActuel
        {
            get { return pageActuel; }
            private set
            {
                pageActuel = value;
                OnPropertyChanged("PageActuel");
            }
        }

        /// <summary>
        /// PV Actuel du détails de la vue
        /// </summary>
        public MEntetePV PVActuel
        {
            get { return pvActuel; }
            set
            {
                pvActuel = value;
                if (pvActuel != null)
                {
                    BuilderCC b = new BuilderCC();
                    b.BuildPart(pvActuel);

                    List<ModelEntities.CompositionChimique.CompositionChimique> listCompo = b.GetResult().ConvertAll<ModelEntities.CompositionChimique.CompositionChimique>(Converter);
                    
                    if (listCompo.Count > 0)
                        NbPages = listCompo.Max(compo => compo.NoPage);

                    Compos.SetData(b.GetResult());

                }
            }
        }

        /// <summary>
        /// Conversion d'un IBuilt en CompositionChimique pour affecter le nombre de page
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private ModelEntities.CompositionChimique.CompositionChimique Converter(IBuilt input)
        {
            return (input as ModelEntities.CompositionChimique.CompositionChimique);
        }


        #endregion

        #region Constructeur

        /// <summary>
        /// Constructeur vide
        /// </summary>
        public DataGridCompositionChimiqueVM()
        {
            Compos = new CompositionChimiques();
            PageActuel = 0;
            NbPages = 0;

            Plus = new RelayCommand(ExPlus, CanExPlus);
            Moins = new RelayCommand(ExMoins, CanExMoins);
        }

        #endregion

        #region Implémentation Command

        private bool CanExMoins(object arg)
        {
            bool b = (PageActuel > 1);
            if (arg != null)
            {
                System.Windows.Controls.Button button = (arg as DataGridCompositionChimique).moins as System.Windows.Controls.Button;
                if (button != null)
                    button.Visibility = b ? Visibility.Visible : Visibility.Hidden;
            }
            return b;
        }

        private void ExMoins(object obj)
        {
            --PageActuel;
            ((obj as DataGridCompositionChimique).Resources["viewSourceCC"] as CollectionViewSource).View.Refresh();
            //(obj as ListCollectionView).Refresh();
        }

        private bool CanExPlus(object arg)
        {
            bool b = !(PageActuel == NbPages);
            if (arg != null)
            {
                System.Windows.Controls.Button button = (arg as DataGridCompositionChimique).plus as System.Windows.Controls.Button;
                if (button != null)
                    button.Visibility = b ? Visibility.Visible : Visibility.Hidden;
            }
            return b;
        }

        private void ExPlus(object obj)
        {
            ++PageActuel;
            ((obj as DataGridCompositionChimique).Resources["viewSourceCC"] as CollectionViewSource).View.Refresh();
            //(obj as ListCollectionView).Refresh();
        }

        #endregion

    }

}
